iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
佛心分享-刷題不只是刷題

只是單純想刷題XD系列 第 6

只是單純想刷題XD Day6

  • 分享至 

  • xImage
  •  

今天就來講解第六題

題目

https://ithelp.ithome.com.tw/upload/images/20240918/201603204qrOtcTZxy.jpg

題目翻譯

給定一個"倒N”字型編碼的字串,還會給定編碼的高度numRows
請問我們解碼還原後的字串,原本內容應該是什麼?

解題思路

1.特殊情況處理
當行數 numRows 等於 1 時,Z 字型變成單行,原字串不需要任何變化,因此直接返回原字串。

2.初始化行結構
使用一個 vector 來存儲每一行的字符。最多只需要 min(numRows, s.size()) 行來存儲字符,因為當字串長度小於行數時,不會用到那麼多行。

3.遍歷字串
遍歷字串中的每個字符,根據當前所在行 curRow 將字符加入到對應的行中。

4.當到達頂行 (curRow == 0) 或底行 (curRow == numRows - 1) 時,變換方向,即從向下走改為向上走或反之。

5.合併結果
遍歷 rows 中的每一行,將每一行的字符合併成最終的答案字串。

code

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1) return s;

        vector<string> rows(min(numRows, int(s.size())));
        int curRow = 0;
        bool goingDown = false;

        // 將字符逐行加入對應的行
        for (char c : s) {
            rows[curRow] += c;
            // 判斷是否需要改變行的方向
            if (curRow == 0 || curRow == numRows - 1) 
                goingDown = !goingDown;
            curRow += goingDown ? 1 : -1;
        }

        // 合併所有行,得到最終結果
        string ans;
        for (string row : rows) 
            ans += row;
        return ans;
    }
};


上一篇
只是單純想刷題XD Day5
下一篇
只是單純想刷題XD Day7
系列文
只是單純想刷題XD30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言